﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Text;

namespace Sinacor.Tools.Dado
{
    public class TraducaoMensagem : DadoBase<Entidade.TraducaoMensagem>
    {
        public override void incluir(Sinacor.Tools.Entidade.TraducaoMensagem entidade)
        {
            string sql = string.Format("INSERT INTO TFWDTRADUCAOMENSAGEM (CODIGOMENSAGEM, CODIGOIDIOMA,CODIGOSTATUSTRADUCAO,MENSAGEM) VALUES ({0},{1},{2},'{3}')",
                entidade.IdMensagem, entidade.Idioma.Id, entidade.StatusTraducao.Id, entidade.MensagemTraduzida);
            ResourceAccess<Sinacor.Tools.Entidade.TraducaoMensagem> dados = new ResourceAccess<Sinacor.Tools.Entidade.TraducaoMensagem>();
            using (IDbCommand cmd = dados.getCommand(sql, CommandType.Text))
            {
                cmd.ExecuteNonQuery();
                cmd.Connection.Close();
            }
        }

        public override void alterar(Sinacor.Tools.Entidade.TraducaoMensagem entidade)
        {
            string sql = string.Format("UPDATE TFWDTRADUCAOMENSAGEM SET MENSAGEM = '{0}', CODIGOSTATUSTRADUCAO = {1} WHERE CODIGOMENSAGEM = {2} AND CODIGOIDIOMA = {3}",
                entidade.MensagemTraduzida, entidade.StatusTraducao.Id, entidade.IdMensagem, entidade.Idioma.Id);
            ResourceAccess<Sinacor.Tools.Entidade.TraducaoMensagem> dados = new ResourceAccess<Sinacor.Tools.Entidade.TraducaoMensagem>();
            using (IDbCommand cmd = dados.getCommand(sql, CommandType.Text))
            {
                cmd.ExecuteNonQuery();
                cmd.Connection.Close();
            }
        }

        public object verificaDependencia(Sinacor.Tools.Entidade.TraducaoMensagem entidade)
        {
            object retorno = null;
            string sql = "SELECT 1 FROM TFWDTRADUCAOMENSAGEM WHERE CODIGOMENSAGEM = " + entidade.IdMensagem.ToString();

            ResourceAccess<Sinacor.Tools.Entidade.TraducaoMensagem> dados = new ResourceAccess<Sinacor.Tools.Entidade.TraducaoMensagem>();
            using (IDbCommand cmd = dados.getCommand(sql, CommandType.Text))
            {
                retorno = cmd.ExecuteScalar();
                if (retorno == DBNull.Value)
                    retorno = null;
                cmd.Connection.Close();
            }

            return retorno;
        }

        public override void deletar(Sinacor.Tools.Entidade.TraducaoMensagem entidade)
        {
            string sql = string.Format("DELETE FROM TFWDTRADUCAOMENSAGEM WHERE CODIGOMENSAGEM = {0} ", entidade.IdMensagem);

            ResourceAccess<Sinacor.Tools.Entidade.TraducaoMensagem> dados = new ResourceAccess<Sinacor.Tools.Entidade.TraducaoMensagem>();
            using (IDbCommand cmd = dados.getCommand(sql, CommandType.Text))
            {
                cmd.ExecuteNonQuery();
                cmd.Connection.Close();
            }
        }

        public override List<Sinacor.Tools.Entidade.TraducaoMensagem> consultar(Sinacor.Tools.Entidade.TraducaoMensagem entidade)
        {
            throw new NotImplementedException();
        }

        public object jaEstaCadastrada(Sinacor.Tools.Entidade.TraducaoMensagem entidade, Sinacor.Tools.Entidade.Mensagem entidadeModulo)
        {
            object retorno = null;
//            string sql = @"	SELECT 1 
//                            FROM TFWDMENSAGEM T1
//                            INNER JOIN TFWDTRADUCAOMENSAGEM T2 ON T1.CODIGOMENSAGEM      = T2.CODIGOMENSAGEM
//                            INNER JOIN TFWDTXT_MSG T3    ON T2.COD_TXT_MSG = T3.COD_TXT_MSG
//							WHERE T1.MODULO = '" + entidadeModulo.Modulo.Trim() + @"'
//							AND   T1.SUBMODULO = '" + entidadeModulo.Submodulo.Trim() + @"'
//							AND   T3.TXT_MSG = '" + entidade.MensagemTraduzida.Trim() + "'";

			string sql = @"	SELECT 1 
                            FROM TFWDTXT_MSG 
							WHERE TXT_MSG = '" + entidade.MensagemTraduzida.Trim() + "'";



            ResourceAccess<Sinacor.Tools.Entidade.TraducaoMensagem> dados = new ResourceAccess<Sinacor.Tools.Entidade.TraducaoMensagem>();
            using (IDbCommand cmd = dados.getCommand(sql, CommandType.Text))
            {
                retorno = cmd.ExecuteScalar();
                if (retorno == DBNull.Value)
                    retorno = null;
                cmd.Connection.Close();
            }

            return retorno;
        }

        public int? consultaID(Sinacor.Tools.Entidade.TraducaoMensagem entidade, Sinacor.Tools.Entidade.Mensagem entidadeModulo)
        {
            int? retorno = null;
            string sql = @"	SELECT T1.CODIGOMENSAGEM 
                            FROM TFWDMENSAGEM T1
                            INNER JOIN TFWDTRADUCAOMENSAGEM T2 ON T1.CODIGOMENSAGEM      = T2.CODIGOMENSAGEM
                            INNER JOIN TFWDTXT_MSG T3    ON T2.COD_TXT_MSG = T3.COD_TXT_MSG
							WHERE T1.MODULO = '" + entidadeModulo.Modulo.Trim() + @"'
							AND   T1.SUBMODULO = '" + entidadeModulo.Submodulo.Trim() + @"'
							AND   T3.TXT_MSG = '" + entidade.MensagemTraduzida.Trim() + "'";



            ResourceAccess<Sinacor.Tools.Entidade.TraducaoMensagem> dados = new ResourceAccess<Sinacor.Tools.Entidade.TraducaoMensagem>();
            using (IDbCommand cmd = dados.getCommand(sql, CommandType.Text))
            {
                object res = cmd.ExecuteScalar();
                if (res != null)
                {
                    retorno = Convert.ToInt32(cmd.ExecuteScalar());
                }
                else
                {
                    retorno = null;
                }
                cmd.Connection.Close();
            }

            return retorno;
        }

        public int? consultaCodigoTextoID(Sinacor.Tools.Entidade.TraducaoMensagem entidade, Sinacor.Tools.Entidade.Mensagem entidadeModulo)
        {
            int? retorno = null;
            string sql = @"	SELECT COD_TXT_MSG
                            FROM TFWDTXT_MSG
							WHERE TXT_MSG = '" + entidade.MensagemTraduzida.Trim() + "'";

            ResourceAccess<Sinacor.Tools.Entidade.TraducaoMensagem> dados = new ResourceAccess<Sinacor.Tools.Entidade.TraducaoMensagem>();
            using (IDbCommand cmd = dados.getCommand(sql, CommandType.Text))
            {
                object res = cmd.ExecuteScalar();
                if (res != null)
                {
                    retorno = Convert.ToInt32(cmd.ExecuteScalar());
                }
                else
                {
                    retorno = null;
                }
                cmd.Connection.Close();
            }

            return retorno;
        }
    }
}
